using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Boa.HD.AccesoDatos.Entidades;
using Boa.HD.Negocios;
using Boa.HD.Negocios.Servicios;
using Didsoft.Mvc.DataModel;
using Didsoft.Mvc.Controller;
using Boa.HD.AccesoDatos.Entidades.DTO;

namespace Boa.HD.Web.Controllers
{
    public class HD_HistoriaProblemaAsistidoController : BaseController<HD_HistoriaProblemaAsistido>
    {
	    #region interface servicios HD_HistoriaProblemaAsistido

		private IHD_HistoriaProblemaAsistidoNegociosServicio servicio = null;

		#endregion
		
		
		#region constructor

        public HD_HistoriaProblemaAsistidoController()
        {
		    servicio = new HD_HistoriaProblemaAsistidoNegocios();
            base.SetDataModelService(servicio);            
        }

        #endregion 

		#region overrided methods
        public override void PreCreate(dynamic ViewBag)
        {
             ViewBag.HD_AsignacionTecnicoProblemas=new HD_AsignacionTecnicoProblemaNegocios().ObtenerTodas();
             ViewBag.HD_EstadoTrabajos=new HD_EstadoTrabajoNegocios().ObtenerTodas();
             ViewBag.HD_HistoriaProblemaAsistidos=new HD_HistoriaProblemaAsistidoNegocios().ObtenerTodas();
             ViewBag.HD_SolicitudAsistencias=new HD_SolicitudAsistenciaNegocios().ObtenerTodas();

        }
        public override void PreEdit(dynamic ViewBag)
        {
             ViewBag.HD_AsignacionTecnicoProblemas=new HD_AsignacionTecnicoProblemaNegocios().ObtenerTodas();
             ViewBag.HD_EstadoTrabajos=new HD_EstadoTrabajoNegocios().ObtenerTodas();
             ViewBag.HD_HistoriaProblemaAsistidos=new HD_HistoriaProblemaAsistidoNegocios().ObtenerTodas();
             ViewBag.HD_SolicitudAsistencias=new HD_SolicitudAsistenciaNegocios().ObtenerTodas();

        }
        #endregion

        public override ActionResult Index()
        {
            return RedirectToAction("FilterList");
        }

        public ActionResult ListarHistorialSoporte()
        {
            //List<HD_HistoriaProblemaAsistido> listado = servicio.HistorialProblemaPorTecnico().Where(p=>p.HistorialProblemaPadre == null).ToList();
            List<HD_HistoriaProblemaAsistido> listado = servicio.HistorialProblemaPorTecnico();
            return View(listado);
        }


        public ActionResult ListaParaAdmin()
        {
            return View();        
        }

        [HttpPost]
        public JsonResult JSONListaParaAdmin(string filter = "", string priority = "-1", string EstadoTrabajoId = "-1",  int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
        {
            try
            {
                var searchedItems = servicio.ListaParaAdministrador(Convert.ToInt32(priority), filter, Convert.ToInt32(EstadoTrabajoId));
                //searchedItems.ForEach(p => { p.SolicitudAsistencia.NombreSolicitante = p.SolicitudAsistencia.NombreSolicitante.Replace("<<", "-").Replace(">>", "");
                //p.HistorialProblemaPadre = null;
                //});
                
                var items = searchedItems.Skip(jtStartIndex).Take(jtPageSize).ToList();
                return Json(new { Result = "OK", Records = items, TotalRecordCount = searchedItems.Count() });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

        [HttpPost]
        public JsonResult JSONActualizarEstado(DtoResumenHistoraProblema entidad)
        {

            try
            {
                if (!ModelState.IsValid)
                {
                    return Json(new { Result = "ERROR", Message = MessageError(ModelState) });
                }

                servicio.ActualizarEstado(entidad);
                return Json(new { Result = "OK" });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }        
        }

        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public string Procesar(string HistorialId="0")
        {
            HD_HistoriaProblemaAsistido historia = servicio.AtenderSolicitud(Convert.ToInt32(HistorialId));
            if (historia.EstadoTrabajo.EstadoTrabajoEnum == EstadoTrabajoEnum.Solucionado)
                return "<b>Esperando Cierre de Solicitante</b>";
            else
                //return "<a class=\"button medium green\" data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-mode=\"replace\" data-ajax-update=\"#atencion-" + HistorialId + "\" href=\"/HD_HistoriaProblemaAsistido/Procesar?HistorialId="+historia.Id+"\">Marcar Como Solucionado</a>";
                return HtmlFormSolucion(Convert.ToInt32(HistorialId), historia.Id);
        }

        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public string ProcesarForm(FormCollection  formData)
        {
            int HistorialId = Convert.ToInt32(formData["historial"]);
            string descripcionSolucion = formData["descripcion"];

            HD_HistoriaProblemaAsistido historia = servicio.AtenderSolicitud(Convert.ToInt32(HistorialId), false, descripcionSolucion);
            if (historia.EstadoTrabajo.EstadoTrabajoEnum == EstadoTrabajoEnum.Solucionado)
                return "<b>Esperando Cierre de Solicitante</b>";
            else
                //return "<a class=\"button medium green\" data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-mode=\"replace\" data-ajax-update=\"#atencion-" + HistorialId + "\" href=\"/HD_HistoriaProblemaAsistido/Procesar?HistorialId=" + historia.Id + "\">Marcar Como Solucionado</a>";
                return HtmlFormSolucion(HistorialId, historia.Id);
            
        }

        private string HtmlFormSolucion(int historialIdPadre, int historiaId)
        { 
          return string.Format(@"<form action='ProcesarForm' data-ajax='true' data-ajax-method='Post' data-ajax-mode='replace' data-ajax-update='#atencion-{0}' id='form0' method='post'>
                        <input type='hidden' name='historial' value='{1}'/>
                        <textarea rows='2' cols='40' id='descripcion' name='descripcion'></textarea><br>                       
                        <input type='submit' value='Enviar al Solicitante' class = 'button medium green'/>                        
                   </form> ",historialIdPadre, historiaId);
        }

    }
}

